#include "bsp_key.h"
#include "bsp_gpio.h"
#include "bsp_delay.h"

/**
 *  @brief  初始化按键
 *  @param  无
 *  @retval 无
 */
void key_init(void)
{
    gpio_pin_config_t key_config;

    /*1. 初始化IO复用,复用为GPIO1_IO18*/
    IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18,0);   //没有初始化输入
    /**
     * 2. 配置UART1_CTS_B的IO属性
     *    bit 16:          0  HYS 关闭  就是关闭施米特触发器
     *    bit [15:14] :    11 默认22k上拉
     *    bit [13]    :     1 pull 功能
     *    bit [12]    :     1 pull/keeper使能
     *    bit [11]    :     0  关闭开路输出
     *    bit [7:6]   :     10 速度100MHz
     *    bit [5:3]   :     000 关闭输出
     *    bit [0]     :      0 低转换数率
     */
    IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0xF080);

    /*3. 初始化GPIO1_IO18 设置为输入*/
    key_config.direction=kGPIO_DigitalInput;
    gpio_init(GPIO1,18,&key_config);
}

/**
 *  @brief  获取按键值
 *  @param  无
 *  @retval 0 表示没有按键按下, 其他值 对应的按键值
 */
int key_get_value(void)
{
    int ret=0;
    static unsigned char release=1;  /*按键松开*/

    if( (release==1) && (gpio_pinread(GPIO1,18)==0) )  //KEY0按下
    {  //前面按键是松开的  然后当前按键被按下了
        delay(10);   //延时10ms消抖
        release=0;   //标记按键按下

        if(gpio_pinread(GPIO1,18) == 0) 
        {
            ret=KEY0_VALUE;
        }
    }
    else if(gpio_pinread(GPIO1,18) == 1)   //按键松开了
    {
        ret=0;

        release=1;  //标记按键释放
    }

    return ret;
}